<?php

/**
 * winbinder 패키지 
 * 
 * 
 * @package php.ui.winbinder
 */


/**
 * ComboBox
 *
 * @package php.ui.winbinder
 */
class WBComboBox extends WBControl { 
	public function __construct($options = array()) { 
		$options['class'] = ComboBox;

		parent::__construct($options);
	}

	protected function initCreate() { 
		parent::initCreate();

		$style = $this->getOption('style');
		
		if (isset($this->readOnly) && $this->getOption('readOnly'))	{ 
			$style |= WBC_READONLY;
		}
		
		$this->setOption('style', $style);
	}

	// 객체 초기화 
	protected function initComponent() { 
		parent::initComponent();	

		if (isset($this->items))	$this->setItems($this->getOption('items'));
		if (isset($this->sort))		$this->sort($this->getOption('sort'));
	}
	
	public function setSize($width, $height) {
		if ($this->getOption('height') > $height) { 
			$height = $this->getOption('height');
		} 
		
		parent::setSize($width, $height);
	}

	/**
	 * 아이템 리스트 설정 
	 *
	 * @param array|string $items 아이템 리스트 
	 */
	public function setItems($items) { 

		if (is_array($items)) { 
			$arr = $items;
		} else if (is_string($items)) { 
			$arr = array_map('trim', explode("\n", $items));
		}

		
		$this->setText($arr);
		$this->items = $arr;
	}

	/**
	 * 아이템 리스트 얻어오기 
	 *
	 * @return array 
	 */
	public function getItems() { 
		return $this->getOption('items');
	}

	/**
	 * 아이템 추가 하기 
	 * 
	 * @param string $text 아이템 추가하기 
	 *
	 */
	public function addItem($text) { 
		array_push($this->getOption('items'), $text);
		$this->setText($this->getOption('items'));
	}

	/**
	 * 아이템 삭제 하기 
	 *
	 * @param int|string $data  지워질 인덱스 또는 텍스트 
	 */
	public function deleteItem($data) { 
		if (is_int($data)) { 
			$items = $this->getOption('items');
			
			unset($items[$data]);

			$temp = array_merge(array(), $items);

			$this->setItems($temp);
		} else if (is_string($data)) { 
			$this->deleteItems(array_search($data, $this->getOption('items')));
		}
	}

	/**
	 * 현재 선택되어진 index 얻어오기 
	 *
	 * @return int 
	 */
	public function getSelectedIndex() { 
		return $this->getSelected();
	}

	/**
	 * 선택되어진 index의 text 얻어오기 
	 *
	 * @param int|string $index  $index가 공백일 경우 현재 선택되어진 index,  아니면 지정된 $index 
	 * @return string text 
	 */
	public function getValue($index = '') { 
		if ($index === '') { 
			return parent::getValue($this->getSelectedIndex());
		} 

		return parent::getValue($index);
	}

	/**
	 * 리스트 선택하기 
	 *
	 * @param int $index 선택되어진 index, -1은 선택되어진 리스트가 없음 
	 */
	public function setSelectedIndex($index = -1) { 
		$this->setValue($index);
	}


	/**
	 * 정렬 설정 
	 *
	 * @param bool $asc true : 내림차순, false : 오름차순 , 문자열 기반으로 정렬 
	 */
	public function sort($asc = true, $sort_flag = 'string') { 

		$sort_flag = wbconstant($sort_flag, "SORT");

		$items = $this->getItems();

		($asc) ? sort($items, $sort_flag) : rsort($items, $sort_flag) ;

		$this->setItems($items);
	}

}

?>